package com.dek.ssm.ch11.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.DeclareParents;
import org.aspectj.lang.annotation.Pointcut;
import com.dek.ssm.ch11.game.GameVerifier;
import com.dek.ssm.ch11.game.impl.GameVerifierimpl;

@Aspect
public class GameAspect {
	

	/**
	 * • value="com.dek.ssm.ch11.game.impl.GameServiceImpl+”： 表示对 GameServiceImpl
	 *	类进行增强，也就是在 GameServiceImpl 中引入一个新的接口 。
	 *	• defaultlmpl：代表其默认的实现类，这里是 GameVerifierimpl 。
	 */
	@DeclareParents(value = "com.dek.ssm.ch11.game.impl.GameServiceImpl+", defaultImpl = GameVerifierimpl.class)
	public GameVerifier GameVerifier;
	
	
	/**
	 * execution ： 代表执行方法的时候会触发。
	＊ 代表任意返回类型的方法。
	* com.dek.ssm.ch11.game.impl.GameServiceImpl：代表类的全限定名。
	* printRole ： 被拦截方法名称。
	* (..) ： 任意的参数。
	 */
	
	@Pointcut("execution (* com.dek.ssm.ch11.game.impl.GameServiceImpl.printGame(..))")
	public void print() {
		
	}
	
	
	@Before("execution (* com.dek.ssm.ch11.game.impl.GameServiceImpl.printGame(..)) && args(name)")
	public void before(String name) {
		System.out.println("-----------------------name : " + name);
		System.out.println("before ... ");
	}
	
	@After("print()")
	public void after() {
		System.out.println("after ... ");
	}
	
	
	@AfterReturning("print()")
	public void afterReturning() {
		System.out.println("afterReturning ... ");
	}
	
	
	@AfterThrowing("print()")
	public void afterThrowing() {
		System.out.println("@AfterThrowing ... ");
	}
	
	
}
